package bancosys.tec.persist;

import java.io.Serializable;

import bancosys.tec.persist.controller.PersistenceEnabledController;
import bancosys.tec.persist.persister.Persister;

/**
 * @author frank
 */
public interface Persistable extends DirtyAware {
    /**
     * Retorna uma instancia do persister baseado que persistir os dados usando a persistencia "fast".
     * 
     * @return uma instencia de Persister.
     */
    Persister<? extends Persistable> getPersister();

    /**
     * Devolve uma instancia da persistencia pura, sem interceptors.
     * 
     * @return uma instancia da persistencia pura
     */
    Persister<? extends Persistable> getPurePersister();

    /**
     * Devolve o controller do bean.
     * 
     * @return o controller do bean.
     */
    PersistenceEnabledController getController();

    /**
     * Define o controller do bean.
     * 
     * @param persistenceEnabledController o controller a ser definido.
     */
    void setController(PersistenceEnabledController persistenceEnabledController);

    /**
     * Devolve o valor da chave primária do bean.
     * 
     * @return o valor da chave primária do bean.
     */
    Serializable getPk();

    /**
     * Define o valor da chave primária do bean.
     * 
     * @param pk o valor da chave primária do bean.
     */
    void setPk(Serializable pk);

    /**
     * Devolve a identificação única para essa instancia.
     * 
     * @return a identificação única para essa instancia.
     */
    String identification();
}
